home *** CD-ROM | disk | FTP | other *** search
- Program Example;
- uses crt,graph;
-
- {
- This Turbo Pascal Code example is an example of a program that simply
- loads the SVGA256 device driver, goes into graphics mode, loads an
- image from disk (one with a palette), and displays it.
-
- Procedure Load256Image will load an image file and place it in the variable
- pointer image. If you are a registered user feel free to use Load256Image
- in your programs.
-
- To run this demonstration, you will need to have Turbo Pascal as well as
- the SVGA256.BGI device driver. This driver is available as shareware,
- through Jordan Hargave (see ReadMe.Doc), but it is also distributed with
- MVP Paint. You have to have a VGA monitor for this example to run, however,
- Super VGA is not at all required.
- }
-
-
- Type
- ColorRec = record
- r,g,b: byte;
- end;
- PalType = array[0..255] of ColorRec;
- PalFileType = file of PalType;
-
-
-
- procedure Load256Image(var p:pointer; FName: string);
- var
- VGAImageSize,ErrCode: word;
- LoadFile: file;
- i: word;
- r: pointer;
- begin
- {$I-}
- Assign(LoadFile,FName);
- Reset(LoadFile,1);
- {$I+}
- if IOResult=0 then begin
- GetMem(r,FileSize(LoadFile));
- {$I-}
- BlockRead(LoadFile,r^,FileSize(LoadFile),ErrCode);
- {$I+}
- VGAImageSize := ImageSize(0,0,MemW[Seg(r^):Ofs(r^)],MemW[Seg(r^):Ofs(r^)+2]);
- If (VGAImageSize < FileSize(LoadFile)) then
- GetMem(p,FileSize(LoadFile)-768)
- else
- GetMem(p,FileSize(LoadFile));
- for i := 1 to (VGAImageSize) do
- Mem[Seg(p^):Ofs(p^)+i-1] := Mem[Seg(r^):Ofs(r^)+i-1];
- If (VGAImageSize < FileSize(LoadFile)) then begin
- for i := 0 to 255 do begin
- Port[$3C8] := i;
- Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize];
- Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+1];
- Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+2];
- end;
- end;
- FreeMem(r,FileSize(LoadFile));
- if IOResult <> 0 then begin
- textmode(c80);
- writeln('Error: ',ErrCode);
- halt(1);
- end;
- Close(LoadFile);
- end else
- Halt(0);
- end;
-
- procedure Load256Palette(PalName: string);
- Var
- PalFile: PalFileType;
- Pal: ^PalType;
- i: integer;
- begin
- New(Pal);
- Assign(PalFile,PalName);
- Reset(PalFile);
- Read(PalFile,Pal^);
- Close(PalFile);
- for i := 0 to 255 do begin
- Port[$3C8] := i;
- Port[$3C9] := Pal^[i].r;
- Port[$3C9] := Pal^[i].g;
- Port[$3C9] := Pal^[i].b;
- end;
- Dispose(Pal);
- end;
-
-
- function DetectVGA256 : integer;
- { Detects VGA or MCGA video cards }
- var
- DetectedDriver : integer;
- SuggestedMode : integer;
-
- begin
- DetectGraph(DetectedDriver, SuggestedMode);
- If (DetectedDriver < 9) then begin
- TextMode(c80);
- TextColor(LightGray);
- writeln('This program requires a VGA System.');
- halt;
- end;
- if (DetectedDriver = VGA) or (DetectedDriver = MCGA) then
- DetectVGA256 := 0 { Default video mode = 0 }
- else
- DetectVGA256 := grError; { Couldn't detect hardware }
- end; { DetectVGA256 }
-
-
-
- Var
- gdrive,gmode: integer;
- image: pointer;
- ch: char;
-
- begin
- GDrive := DetectVGA256;
- GDrive := InstallUserDriver('SVGA256', @DetectVGA256);
- GDrive := Detect;
- Gdrive := InstallUserDriver('SVGA256',Nil);
-
- gmode:=0;
- InitGraph(Gdrive,Gmode,'');
- SetGraphMode(Gmode);
-
- Load256Image(image,'Moon.VGA');
- PutImage(0,0,image^,copyput);
- FreeMem(image,imagesize(0,0,MemW[Seg(image^):Ofs(image^)],MemW[Seg(image^):Ofs(image^)+2]));
- ch := readkey;
- TextMode(c80);
- end.